package main

import (
	"fmt"
	"net"
	"os"
)

func main() {
	var addr string
	if len(os.Args) == 1 {
		addr = "127.0.0.1:8899"
	} else {
		addr = os.Args[1]
	}

	tcpAddr, err := net.ResolveTCPAddr("tcp4", addr)
	checkError(err)
	conn, err := net.DialTCP("tcp", nil, tcpAddr)
	checkError(err)
	//注意，关闭必须要在能正常的建立连接
	defer conn.Close() //增加关闭tcp链接
	result := make([]byte, 1024)
	//增加文件输出
	file, err := os.Create("server_2.exe")
	defer file.Close()
	checkError(err)

	//循环读取内容，跟文件读取方式非常像
	for {
		//循环内申明变量，n实际在第二次循环的时候，已经不再是新的变量，但是编译器没有报告错误
		n, err := conn.Read(result)
		if n == 0 || err != nil { //读取结束
			break
		}
		//fmt.Println(string(result[:n]))
		//直接写到文件
		file.Write(result[:n])
	}
	fmt.Println("done")
}
func checkError(err error) {
	if err != nil {
		fmt.Fprintf(os.Stderr, "Fatal error: %s\n", err.Error())
		os.Exit(1)
	}
}
